package com.kcloud.commons.authorization.settings.biz.service;

import com.kcloud.commons.authorization.settings.biz.entity.BizEntity;
import com.kcloud.commons.authorization.settings.biz.entity.BizFunction;
import com.kcloud.commons.authorization.settings.biz.entity.CtrlUnitBizFunction;
import com.kcloud.commons.authorization.settings.biz.entity.UserBizFunction;
import com.kcloud.commons.entity.control.BizDomain;
import com.kcloud.commons.entity.control.Operation;
import com.kcloud.commons.entity.core.CtrlUnit;

import java.util.List;
import java.util.Map;

/**
 * 业务设置Service接口
 *
 * @author songhuiqing
 */
public interface BizSettingsService {


    /**
     * 获取业务域
     * @param domain
     * @return
     */
    BizDomain getBizDomain(BizDomain domain);
    /**
     * TODO 新增业务实体
     *
     * @param entity
     */
    void addBizEntity(BizEntity entity);

    /**
     * TODO 更新业务实体
     *
     * @param entity
     */
    void updateBizEntity(BizEntity entity);

    /**
     * TODO 删除业务实体
     *
     * @param ids
     */
    void deleteBizEntity(String[] ids);

    /**
     * TODO 查询业务域下的业务实体
     *
     * @param domainCode
     * @return
     */
    List<BizEntity> listBizEntity();

    /**
     * TODO 根据主键查询业务实体
     * @param id
     * @return
     */
    BizEntity getBizEntity(String id);

    /**
     * TODO 新增业务功能
     *
     * @param function
     */
    void addBizFunction(BizFunction function);

    /**
     * TODO 删除业务功能
     *
     * @param ids
     */
    void deleteBizFunction(String[] ids);

    /**
     * TODO 根据业务实体id查询业务功能列表
     *
     * @param bizEntityId
     * @return
     */
    List<BizFunction> listBizFunction(String bizEntityId);

    /**
     * 查询业务功能
     * @param bizFunctionId
     * @return
     */
    List<BizFunction> listBizFunction(String[] bizFunctionId);

    /**
     * TODO 更新业务功能，含功能属性及功能操作
     *
     * @param function
     */
    void updateBizFunction(BizFunction function);

    /**
     * TODO 根据业务功能ID查询业务功能，含功能属性及操作
     *
     * @param id
     * @return
     */
    BizFunction getBizFunction(String id);

    /**
     * TODO 新增业务功能权限控制，可以是多个控制单元和多个业务功能。控制单元可以是用户、岗位或机构，业务共功能主要定义的是功能的操作和属性集合
     * @param ctrlUnitBizFunction 业务功能权限控制对象
     */
    void addBizFunctionToUser(CtrlUnitBizFunction ctrlUnitBizFunction);

    /**
     * TODO 获取用户指定业务功能的配置信息
     * @param userId 用户ID
     * @param funcCode 业务功能编码
     * @return
     */
    UserBizFunction getUserBizFunction(String userId, String funcCode);

    /**
     * 查询用户业务功能清单
     * @return
     */
    List<UserBizFunction> listUserBizFunction(String userId, String configId);
}
